package juc.semaphore;

import java.util.Random;
import java.util.concurrent.Semaphore;

/**
 * 停车场线程
 */
public class Park {
	
	private Semaphore semaphore; // 信号量，代表停车位数量
	
	/**
	 * @param count 停车位数量
	 */
	Park(int count) {
		semaphore = new Semaphore(count);
	}
	
	/**
	 * 停车
	 * @param carNo 车牌号
	 */
	public void parking(String carNo) {
		try {
			// 获取信号量
			semaphore.acquire();
			
			// 模拟停车时长
			System.out.println(System.currentTimeMillis() + " " + carNo + "进入停车场...");
			int parkTime = new Random().nextInt(10000);
			Thread.sleep(parkTime);
			System.out.println(System.currentTimeMillis() + " " + carNo + "开出停车场， 停了" + parkTime + "毫秒");
		} catch (InterruptedException e) {
			e.printStackTrace();
		} finally {
			// 释放信号量
			semaphore.release();
		}
	}

}
